package tempsReel;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import metiers.Cluster;
import metiers.Clustering;
import metiers.Concept;

@ManagedBean
public class VueChoixOrdresBean {

	@ManagedProperty(value = "#{contextUser}")
	private ContexteUtilisateur contexteUtilisateur;

	public ContexteUtilisateur getContexteUtilisateur() {
		return contexteUtilisateur;
	}

	public void setContexteUtilisateur(ContexteUtilisateur contexteUtilisateur) {
		this.contexteUtilisateur = contexteUtilisateur;
	}

	/**
	 * Méthode permettant d'obtenir tous les concepts de la requête (concept
	 * principal + tous les concepts complémentaires)
	 * 
	 * @return la liste de tous les concepts
	 */
	public List<Concept> getConcepts() {
		System.out.println("je suis rentrée dans getConcepts()");
		List<Concept> concepts = new ArrayList<Concept>();
		if (contexteUtilisateur.getResultat()
						.getListeConceptsParImportance().size() > 2) {
			System.out
					.println("je suis dans le cas où on a bien classé par importance");
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(0));
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(1));
			concepts.add(contexteUtilisateur.getResultat()
					.getListeConceptsParImportance().get(2));
		} else {
			System.out.println("on n'a pas classé par importance. ");
			concepts.add(contexteUtilisateur.getResultat().getRequete()
					.getConceptPrincipal());
			concepts.addAll(contexteUtilisateur.getResultat().getRequete()
					.getConcepts());
		}
		System.out.println("je suis sortie de getConcepts()");
		return concepts;
	}

	public String executerClustering() {
		// On supprimera plus tard cette étape
		contexteUtilisateur.getResultat().ajouterClustering(
				contexteUtilisateur.getConcept1(),
				contexteUtilisateur.getConcept2());

		// On recherche le clustering correspondant
		Clustering clustering = contexteUtilisateur.getResultat()
				.getClustering(contexteUtilisateur.getConcept1(),
						contexteUtilisateur.getConcept2());

		// On met à jour l'attribut clusteringChoisi de contexteUtilisateur
		contexteUtilisateur.setClusteringChoisi(clustering);

		System.out.println("concept1 "
				+ contexteUtilisateur.getConcept1().getNom());
		System.out.println("concept2 "
				+ contexteUtilisateur.getConcept2().getNom());
		System.out.println("nombre de clustering "
				+ contexteUtilisateur.getResultat().getClusterings().size());
		for (Cluster c : contexteUtilisateur.getResultat().getClusterings()
				.get(0).getClusters()) {
			System.out.println("modalité1 " + c.getModalite1() + " modalité2 "
					+ c.getModalite2());
			System.out.println("Taille données cluster "
					+ c.getDonnees().size());
		}

		return "VueResultats.xhtml";
	}
}
